# bash completion for qemu                                 -*- shell-script -*-

_qemu()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        -fd[ab] | -hd[abcd] | -cdrom | -option-rom | -kernel | -initrd | \
            -bootp | -pidfile | -loadvm | -mtdblock | -sd | -pflash | -bios)
            _filedir
            return
            ;;
        -tftp | -smb | -L | -chroot)
            _filedir -d
            return
            ;;
        -boot)
            COMPREPLY=($(compgen -W 'a c d n' -- "$cur"))
            return
            ;;
        -k)
            local IFS=$' \t\n' reset=$(shopt -p nullglob)
            shopt -s nullglob
            local -a keymaps=($(
                printf "%s\n" \
                    /usr/{local/,}share/qemu/keymaps/!(common|modifiers)
            ))
            $reset
            ((${#keymaps[@]})) &&
                COMPREPLY=($(compgen -W '"${keymaps[@]##*/}"}' -- "$cur"))
            return
            ;;
        -soundhw)
            COMPREPLY=($(compgen -W "$($1 -soundhw help | awk \
                '/^[[:lower:]]/ {print $1}') all" -- "$cur"))
            return
            ;;
        -machine | -M)
            COMPREPLY=($(compgen -W "$($1 $prev help | awk \
                '/^[[:lower:]]/ {print $1}')" -- "$cur"))
            return
            ;;
        -cpu)
            COMPREPLY=($(compgen -W "$($1 -cpu help | awk '{print $2}')" \
                -- "$cur"))
            return
            ;;
        -usbdevice)
            COMPREPLY=($(compgen -W 'mouse tablet disk: host: serial: braille
                net' -- "$cur"))
            return
            ;;
        -net)
            COMPREPLY=($(compgen -W 'nic user tap socket vde none dump' \
                -- "$cur"))
            return
            ;;
        -serial | -parallel | -monitor)
            COMPREPLY=($(compgen -W 'vc pty none null /dev/ file: stdio pipe:
                COM udp: tcp: telnet: unix: mon: braille' -- "$cur"))
            return
            ;;
        -redir)
            COMPREPLY=($(compgen -S":" -W 'tcp udp' -- "$cur"))
            return
            ;;
        -bt)
            COMPREPLY=($(compgen -W 'hci vhci device' -- "$cur"))
            return
            ;;
        -vga)
            COMPREPLY=($(compgen -W 'cirrus std vmware xenfb none' -- "$cur"))
            return
            ;;
        -drive)
            COMPREPLY=($(compgen -S"=" -W 'file if bus unit index media cyls
                snapshot cache format serial addr' -- "$cur"))
            return
            ;;
        -balloon)
            COMPREPLY=($(compgen -W 'none virtio' -- "$cur"))
            return
            ;;
        -smbios)
            COMPREPLY=($(compgen -W 'file type' -- "$cur"))
            return
            ;;
        -watchdog)
            COMPREPLY=($(compgen -W "$($1 -watchdog help 2>&1 |
                awk '{print $1}')" -- "$cur"))
            return
            ;;
        -watchdog-action)
            COMPREPLY=($(compgen -W 'reset shutdown poweroff pause debug
                none' -- "$cur"))
            return
            ;;
        -runas)
            _allowed_users
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_help "$1" -help) -fd{a,b}
            -hd{a..d}' -- "$cur"))
    else
        _filedir
    fi
} &&
    complete -F _qemu qemu qemu-kvm qemu-system-i386 qemu-system-x86_64

# ex: filetype=sh
